題目要求我們從網頁中讀取到 /etc/password 的資訊,並且提示給了我們 XML external entity injection 這個提示。
hint 1:XML external entity Injection
那我們就先來看看 XML external entity Injection ( 也稱為 XXE ) 到底是甚麼吧!
在了解 XXE 前,要先了解什麼是 XML。
XML 是一個純文件型態的檔案,將 data 以簡單格式儲存,以供跨平台使用。
其中 XML 有 (1) DTD 和 (2) XML schema 這兩個部分。
DTD ( document type defination ) 又分成 4 個部分:(1) elements (2) attribute (3) entity (4) comments。
XML schema 則是 HTML 的版本。
而 XXE 簡單來說就是透過 XML 增加一些外部 entity, 然後藉此查看到 server 的資料。( 如下圖 )
詳情可參考以下網址:
What is XXE ( 圖源來自於此 ) 、 來自外部的威脅- XXE漏洞攻擊成因
回到正題,點擊題目給的網址,會出現以下畫面。
我們打開 burpesuite,發現點擊任一圖片的 detail,會出現以下 request,
在 repeater 中送出 request,可以看到 response 如下。
增加 XXE,並且將 ID 設為我們自訂的 entity 名稱,再次 request 後,得到的 response 就會出現 etc/password 的資訊了,並且可以看到 flag 就在 response 中。
而我們新增的<!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
這行的意思是將 "file:///etc/passwd" 定義為 xxe 這個變數名稱。之後出現 &xxe;
的地方就代表 "file:///etc/passwd" 的意思。
小結:
了解 XXE 和 XML。